package rdd.operate;

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;

import java.util.Arrays;
import java.util.List;

//foreach是一个个元素逐个打印
//forEachPartition是直接读取一个分区的数据

//foreach不占大量内存，但是执行效率低下
//foreachPartition由于是直接读取一个分区的数据，效率高，但是可能占用内存大，可能发生内存溢出
public class Spark_Operate_forEachPartition {
    public static void main(String[] args) {
        final SparkConf conf = new SparkConf();
        conf.setMaster("local");
        conf.setAppName("spark");
        final JavaSparkContext jsc = new JavaSparkContext(conf);

        final List<Integer> nums = Arrays.asList(4,3,2,1);
        final JavaRDD<Integer> rdd = jsc.parallelize(nums,3);

        //因为是整个分区进行读取，而分区内的数据是集合，所以每个分区的类型是list
        //有几个分区，打印出来的就有几个迭代器
        rdd.foreachPartition(
                list -> System.out.println(list)
        );
    }
}
